package com.xzcedu.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author 徐州城
 * @version 1.0
 * UDP接收端
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {

        //1. 创建一个DatagramSocket 对象，准备在9999端口接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2. 构建一个DatagramPacket 对象，准备接收
        //   了解了UDP协议，一个数据包最大 64k
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3. 调用接收方法，将通过网络传输的 DatagramPacket对象 填充到 packet对象
        //说明：
        //当有数据包发送到 本机的9999端口时，就会接收到数据
        //如果没有数据包发送到 本机的9999端口号，就会阻塞等待...
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);

        //4. 可以把packet 进行拆包，取出数据，并显示。
        int length = packet.getLength();//实际接收到的数据字节长度
        byte[] data = packet.getData();

        String s = new String(data, 0, length);
        System.out.println(s);

        //===回复信息给B端
        byte[] data2 = "好的 明天见!".getBytes();
        packet =
                new DatagramPacket(data2, 0, data2.length, InetAddress.getByName("192.168.111.1"), 9998);
        socket.send(packet);//发送数据 到 主机为 192.168.111.1 端口为9998

        //关闭资源
        socket.close();
        System.out.println("A端退出...");
    }
}
